package statistiques;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Pattern;

import javax.swing.JFileChooser;
import javax.swing.JLabel;

import logger.Logger;
import Modele.Log;
import Modele.Parseur;
import param.EcouteurParametre;
import xml.SettingsProvider;

public class EcouteurStatistiques implements ActionListener {
	public static final EcouteurStatistiques INSTANCE = new EcouteurStatistiques();

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("rechercher"))
		{
			FenetreStatistiques.INSTANCE.resetResultats();
			
			HashMap<Integer, AtomicInteger> stats = new HashMap<>();

			boolean vide = false;
			if(FenetreStatistiques.INSTANCE.rechercheCommande.getText().trim().equals(""))
				vide = true;
			
			//comptage
			Pattern p = Pattern.compile(".*?" + FenetreStatistiques.INSTANCE.rechercheCommande.getText().toLowerCase() + ".*");
			//System.out.println("REGEX : .*?" + FenetreStatistiques.INSTANCE.rechercheCommande.getText() + ".*");
			for(Log l : Parseur.INSTANCE.logs)
			{
				if(vide || p.matcher(l.command.toLowerCase()).matches())
				{
					if(!stats.containsKey(l.playerAcc))
						stats.put(l.playerAcc, new AtomicInteger(0));
					stats.get(l.playerAcc).incrementAndGet();
				}
			}
			
			//affichage
			for(int id : stats.keySet())
			{
				//System.out.println("ID "+id+" => "+stats.get(id).get());
				FenetreStatistiques.INSTANCE.setIdValue(id, stats.get(id).get());
			}
		}
		else if(e.getActionCommand().equals("save"))
		{
			JFileChooser fc = new JFileChooser();
			DateFormat format = new SimpleDateFormat("YYYY-MM-dd_hh-mm-ss");
			fc.setSelectedFile(new File("out_"+format.format(Calendar.getInstance().getTime())+".csv"));
			
			if(SettingsProvider.INSTANCE.haveParam("SaveStatsFolder"))
			{
				fc.setCurrentDirectory(new File(SettingsProvider.INSTANCE.getParam("SaveStatsFolder")));
			}
			
			fc.showSaveDialog(null);

			if(fc.getSelectedFile() != null)
			{
				//BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(Fenetre.INSTANCE.chargement_path.getText()), "UTF-8"));
				try {
					BufferedWriter br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fc.getSelectedFile().getAbsoluteFile()), "ISO-8859-1"));
					
					br.append(";Statistiques pour :;"+FenetreStatistiques.INSTANCE.rechercheCommande.getText()+"\n");
					br.append("\n");
					br.append("ID;Nom (partiel);Nombre\n");
					
					for(JLabel[] ligne : FenetreStatistiques.INSTANCE.listeRes)
					{
						br.append(ligne[0].getText()+";"+ligne[1].getText()+";"+ligne[2].getText()+"\n");
					}

					br.close();
					SettingsProvider.INSTANCE.setParam("SaveStatsFolder", fc.getCurrentDirectory().getAbsolutePath());
				} catch (Exception e1) {
					e1.printStackTrace();
					Logger.INSTANCE.logError(e1);
				}
			}
		}
	}
	
}
